﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.BL.BE;
using DECOR.DL.DALC.SAPC.Proxy;
using System.Data;
using CM.BL.BE;

namespace DECOR.DL.DALC.SAPC
{
    public class UsuarioDALC : IUsuarioDALC
    {
        
        public static UsuarioDALC Instance() {
            if (_instance == null)
            {
                lock (typeof(UsuarioDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new UsuarioDALC();
                    }
                }
            }
            return _instance;
        }

        private UsuarioDALC() { }
        private static volatile UsuarioDALC _instance = null;

        #region IUsuarioDALC Members

        public List<UsuarioBE> listar()
        {
            throw new NotImplementedException();
        }

        public List<UsuarioBE> buscarXNombre(string pNombre)
        {
            throw new NotImplementedException();
        }

        public List<UsuarioBE> buscarXUsuarioSAP(int pUsuarioSAP_id)
        {
            throw new NotImplementedException();
        }

        public List<UsuarioBE> buscarXCorreo(string pCorreo)
        {
            throw new NotImplementedException();
        }

        public UsuarioBE leer(int pUsuario_id)
        {
            throw new NotImplementedException();
        }

        public UsuarioBE leer(string pUsuario)
        {
            throw new NotImplementedException();
        }

        public void agregar(UsuarioBE objUsuario)
        {
            throw new NotImplementedException();
        }

        public bool login(UsuarioBE objUsuario)
        {
            throw new NotImplementedException();
        }

        public void eliminar(int pUsuario_id)
        {
            throw new NotImplementedException();
        }

        public bool actualizar(UsuarioBE objUsuario)
        {
            throw new NotImplementedException();
        }

        public List<UsuarioBE> listar(DECOR.BL.BE.UsuarioBE pObjUsuarioWeb)
        {
            throw new NotImplementedException();
        }

        public string actualizar(RfcConfigParametersBE pObjUsuarioWebBE)
        {
            string retMsg = "";
            UsuariosProxy proxy = new UsuariosProxy();
            try
            {
                proxy.Connection = DALC.getConnection;
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                //-----------------
               //proxy.Zweb_Cambia_Password(pObjUsuarioWebBE.Passwd.ToUpper(), pObjUsuarioWebBE.Uname.ToUpper());
                proxy.Zweb_Cambia_Password(pObjUsuarioWebBE.PasswordWEB.ToUpper(), pObjUsuarioWebBE.UsuarioWEB.ToUpper());        
                //-----------------
            }
            catch (Exception ex)
            {
                retMsg = ex.Message;
            }
            finally
            {
                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;
            }
            return retMsg.Trim();
        }

        public string login(ref RfcConfigParametersBE pObjUsuarioWebBE)
        {
            DALC.Username = "";
            DALC.Password = "";
            string retMsg = "";
            RfcConfigParametersBE objConn = new RfcConfigParametersBE();
            UsuariosProxy proxy = new UsuariosProxy();
            //--- login con params de sap:
            if (!string.IsNullOrEmpty(pObjUsuarioWebBE.Uname) &&
                !string.IsNullOrEmpty(pObjUsuarioWebBE.Passwd))
            {
                try
                {
                    //objConn.Id = pObjUsuarioWebBE.guid;
                    //objConn.Uname = pObjUsuarioWebBE.UsuarioSap;
                    //objConn.Passwd = pObjUsuarioWebBE.pwdStatus;
                    CredencialesController.Usuario = pObjUsuarioWebBE;

                    proxy.Connection = DALC.getConnection;
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch (Exception ex)
                {
                    retMsg = ex.Message;
                    if (ex.Message.ToUpper().IndexOf("CONN") >= 0)
                    {
                        retMsg = ParametroDALC.getParamValueStatic("msgConnError");
                    }
                }
            }
            else
            {
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                //-----------------
                string claveSap = "", perNr = "", usuarioSap = "", fechaPswd = "";
                string orgVentas = "", canalDist = "", ofVentas = "", grpVend = "", clienteEvent = "";
                string descripcion = ""; //WEBDIST
                proxy.Zweb_Usuariosap(pObjUsuarioWebBE.PasswordWEB.ToUpper(), pObjUsuarioWebBE.UsuarioWEB.ToUpper(),
                                out fechaPswd, out descripcion, out clienteEvent, out retMsg, out claveSap, out perNr, out usuarioSap,
                                out ofVentas, out grpVend, out orgVentas, out canalDist);
                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;
                //-----------------
                pObjUsuarioWebBE.Passwd = claveSap;
                pObjUsuarioWebBE.PerNr = perNr;
                //--- datos adicionales
                pObjUsuarioWebBE.OfVentas = ofVentas;
                pObjUsuarioWebBE.OrgVentas = orgVentas;
                pObjUsuarioWebBE.CanalDist = canalDist;
                pObjUsuarioWebBE.GrpVend = grpVend;
                pObjUsuarioWebBE.ClienteEvent = clienteEvent;
                //---------------------
                pObjUsuarioWebBE.Uname = usuarioSap;
                pObjUsuarioWebBE.FechaPswd = ParametroDALC.dateSapToNet(fechaPswd);
                pObjUsuarioWebBE.Descripcion = descripcion; //WEBDIST

                if (retMsg.Equals(""))
                {
                    DALC.Username = usuarioSap;
                    DALC.Password = claveSap;
                }
            }
            return retMsg;
        }

        //WEBDIST
        public List<string> ObtenerOpcionesPorUsuario()
        {
            UsuariosProxy proxy = new UsuariosProxy();
            List<string> lstOpciones = new List<string>();

            try
            {
                proxy.Connection = DALC.getConnection;
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }

                ZSSD_OPCION_USERTable t_opciones = new ZSSD_OPCION_USERTable();
                proxy.Zweb_Opciones_Usuario(ref t_opciones);
                DataTable dt = t_opciones.ToADODataTable();
                foreach (DataRow dr in dt.Rows)
                {
                    lstOpciones.Add(dr["opcion"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lstOpciones;
        }

        #endregion

        #region IUsuarioDALC Members


        #endregion

        #region Miembros de IUsuarioDALC


        public string logout(string id)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
